Spring MVC | SpringMVC-获取 Session 的几种方法.md
Published on
Last updated onSpringMVC-获取 Session 的几种方法.md
方法1:方法的参数列表
1 2 3 4 5 6
| @PostMapping(value = "/msg1") @ApiOperation("获取用户信息") public GlobalResult msg1(HttpSession session){ UserMsgResp userMsg = (UserMsgResp) session.getAttribute("userMsg"); return GlobalResult.success(userMsg); }
|
或者
1 2 3 4 5 6
| @PostMapping(value = "/msg1") @ApiOperation("获取用户信息") public GlobalResult msg1(@Autowired HttpSession session){ UserMsgResp userMsg = (UserMsgResp) session.getAttribute("userMsg"); return GlobalResult.success(userMsg); }
|
方法2:RequestContextHolder
RequestContextHolder,顾名思义,持有上下文的Request容器.
1 2 3 4 5 6 7
| @PostMapping(value = "/msg1") @ApiOperation("获取用户信息") public GlobalResult msg1(){ HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); HttpSession session = request.getSession(); }
|
根据你的需求,选择合适的方法来获取 HttpSession
我根据喜欢使用第二种方式来获取 HttpSession,因为相对于第一种方式,第二种方式有下面的优点
- 更加灵活。你可以在 service 层直接获取到 HttpSession,而不需要 controller 传入。
- 不占用参数列表。在参数列表中添加 HttpSession,swagger2 会出现相关的内容。
另外,HttpServletRequest 和 HttpServletResponse 也可以通过上面的方法来获取
注意
不要使用 ModelAttribute
注解来获取 HttpServletRequest 、HttpServletResponse 和 HttpSession
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| protected HttpServletRequest request; protected HttpServletResponse response; protected HttpSession session;
@ModelAttribute public void setReqAndRes(HttpServletRequest request, HttpServletResponse response) { this.request = request; this.response = response; this.session = request.getSession(); }
@PostMapping(value = "/msg1") @ApiOperation("获取用户信息") public GlobalResult msg1(){ UserMsgResp userMsg = (UserMsgResp) session.getAttribute("userMsg"); return GlobalResult.success(userMsg); }
|
因为会产生线程不安全问题,所以不推荐使用